#include <pthread.h>
#include <iostream>
#include <semaphore.h>
using namespace std;

namespace SemModule
{
    const int default_value = 1; // 默认信号量值
    class Sem
    {
    public:
        Sem(unsigned int sem_value = default_value)
        {
            sem_init(&sem, 0, sem_value); // 初始化信号量,第二个参数设置为0表示线程共享，第三个用来计数
        }
        void P() // 生产
        {
            int n = sem_wait(&sem); // 等待信号量
            (void)n;
        }
        void V() // 消费
        {
            int n = sem_post(&sem); // 释放信号量，原子的
            (void)n;
        }
        ~Sem()
        {
            sem_destroy(&sem); // 销毁信号量
        }

    private:
        sem_t sem;
    };

}